iT邦幫忙

2021 iThome 鐵人賽

DAY 28
0
Mobile Development

從無到有! Unity AR手遊開發日誌-以山海異聞錄為例系列 第 28

Day 28 | Unity遊戲開發 - 介面設置及場景轉換

  • 分享至 

  • xImage
  •  

在上一篇文章提到對話系統的管理,今天我們要來說明主畫面設定及場景資料轉換。
需要注意的是,介面的素材圖需要將背景及按鈕分別輸出喔!

目錄
素材圖
介面設置
場景轉換

素材圖

開始畫面-背景 關卡介面-背景
開始畫面-按鈕 關卡介面-按鈕

介面設置

開始畫面

在Scene中使用Canvas加入主畫面介面,並將開始按鈕放上正確位置

關卡介面

另外開一個新場景,並將關卡介面圖放入Scene中

將所有關卡按鈕放置正確的位置,按鈕名稱依照關卡順序取名

場景轉換

場景切換

將所有需要切換的場景在File>Build Settings>Scenes In Build中加入

新增SceneManager()來管理所有場景,在SceneTrans()中使用string傳關卡名稱

public void SceneSwitch(string _SceneName) 
    {
        SceneManager.LoadScene(_SceneName);
    }

在Scene按鈕中,加上場景切換功能

關卡切換

我們的關卡希望可以完成一關,才可以解鎖下一關,因此需要設立一個變數來判斷關卡是否解鎖。

在LevelSelection()中加入bool,來判斷關卡目前狀態

private bool unlocked; //預設為fasle

在PressSelection()中:

  • 判斷bool值,來決定是否切換場景
  • 因為有多個關卡需要切換,因此使用string傳關卡名稱
 public void PressSelection(string _LevelName) 
    {
        if (unlocked)
        {
            SceneManager.LoadScene(_LevelName);
        }
    }

在Scene中,為每個按鈕都加上場景切換功能

在每個遊戲關卡中加入SingleLevel()中,使用PlayerPrefs儲存關卡數值

public levelIndex;
public Score;

public void PressedFinished()
    {
        PlayerPrefs.SetInt("Lv" + levelIndex, Score);
    }

在LevelSelectioon()中讀取PlayerPrefs數值,更新關卡狀態

private void UpdateLevelStatus()
{
    int previousLevelNum = int.Parse(gameObject.name) -1;
    if(PlayerPrefs.GetInt("Lv" + PreviousLevelNum) > 0) //上一個關卡分數是否大於0
    {
        unlocked = true;
    }
}

並在Update()中加入

UpdateLevelStatus()

如此一來便完成介面及場景切換功能嘍!下一篇將會為各位介紹我們所用到的專案管理工具,明天見!


上一篇
Day 27 | Unity遊戲開發 - 對話介面管理器
下一篇
Day 29 | Unity 遊戲開發 - 專案管理工具
系列文
從無到有! Unity AR手遊開發日誌-以山海異聞錄為例30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
juck30808
iT邦研究生 1 級 ‧ 2021-10-12 18:32:28

恭喜即將完賽!!!

我要留言

立即登入留言